const state = {
  items: []
}

const mutations = {
  setItems(state, id) {
    state.items.push({
      id,
      quantity: 1
    })
  }
}

const actions = {
  addToCart({ commit, state, dispatch }, id) {
    // 查找购物车里是否有这个产品
    const p = state.items.find(p => p.id === id)
    
    // 如果有，这个商品的数量加 1
    // 如果没有，需要把这个产品放入购物车
    if (!!p) {
      p.quantity++
    } else {
      commit('setItems', id)
    }

    // 将这个产品的库存减少一个
    dispatch('product/decrementInventory', id, { root: true })
  }
}

const getters = {
  allCartInfo(state, getters, rootState) {
    // 根据id获取产品的数量
    // const quantity = state.items.find(item => item.id === id)
    // const product = rootState.product.all.find(p => p.id === id)

    // getters: 当前组件的全部getters的引用
    // rootState: 整个仓库的状态的引用

    // 遍历购物车里的全部产品
    return state.items.map((item) => {
      // item.id 是购物车里的产品 id
      const product = rootState.product.all.find(p => p.id === item.id)

      return {
        ...item,
        ...product
      }
    })
  },

  totalPrice(state, getters) {
    return getters.allCartInfo.reduce((sum, item) => {
      sum += item.price * item.quantity
      return sum
    }, 0)
  }
}

const namespaced = true

export {
  namespaced,
  state,
  mutations,
  actions,
  getters
}